/**
 * 日期处理类
 */
package com.lbt.weixin.server.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author mo_yq5
 *
 */
public abstract class DateUtil {
	private static final String DATE_PATTERN = "yyyy-MM-dd";
	private static final String TIME_PATTERN = "HH:mm:ss";
	private static final String DATETIME_PATTERN = DATE_PATTERN+" "+TIME_PATTERN;
	
	/**
	 * 获得日期时间对象
	 * @return
	 */
	public static Date getDateTime(String dateTimeStrP){
		Date date = new Date();
		if(dateTimeStrP!=null  && !dateTimeStrP.isEmpty()){
			SimpleDateFormat format = new SimpleDateFormat();
			format.applyPattern(DATETIME_PATTERN);
			try {
				date = format.parse(dateTimeStrP);
				
			} catch (ParseException e) {
				try {
					format.applyPattern(DATE_PATTERN);
					date = format.parse(dateTimeStrP);
					
				} catch (ParseException e1) {
					date=new Date();
					e1.printStackTrace();
				}
			}
		}
		return date;
	}
	
	/**
	 * 获取当前日期时间对象
	 * @return
	 */
	public static Date getDateTime(){
		return getDateTime(null);
	}
	
	/**
	 * 获得日期时间字符串形式
	 * @param dateTimeP
	 * @return
	 */
	public static String getDateTimeStr(Date dateTimeP){
		dateTimeP=checkDate(dateTimeP);
		SimpleDateFormat format = new SimpleDateFormat();
		format.applyPattern(DATETIME_PATTERN);
		return format.format(dateTimeP);
		
	}
	
	/**
	 * 获得当前日期时间字符形式
	 * @return
	 */
	public static String getDateTimeStr(){
		return getDateTimeStr(null);
	}
	
	/**
	 * 获得日期字符串形式
	 * @param dateTimeP
	 * @return
	 */
	public static String getDateStr(Date dateTimeP){
		dateTimeP=checkDate(dateTimeP);
		SimpleDateFormat format = new SimpleDateFormat();
		format.applyPattern(DATE_PATTERN);
		return format.format(dateTimeP);
		
	}
	/**
	 * 将毫秒转换为日期字符串形式
	 * @param timeStampP
	 * @return
	 */
	public static String getDateStr(long timeStampP){
		Date date = new Date();
		date.setTime(timeStampP);
		return getDateStr(date);
		
	}
	
	/**
	 * 获得当前日期字符串形式
	 * @return
	 */
	public static String getDateStr(){
		return getDateStr(null);
	}
	
	/**
	 * 获得时间字符串形式
	 * @param dateTimeP
	 * @return
	 */
	public static String getTimeStr(Date dateTimeP){
		dateTimeP=checkDate(dateTimeP);
		SimpleDateFormat format = new SimpleDateFormat();
		format.applyPattern(TIME_PATTERN);
		return format.format(dateTimeP);
		
	}
	
	/**
	 * 获得当前时间字符串形式
	 * @return
	 */
	public static String getTimeStr(){
		return getTimeStr(null);
	}
	
	/**
	 * 获得日期时间的毫秒形式
	 * @param dateTimeP
	 * @return
	 */
	public static long getTimeStamp(Date dateTimeP){
		dateTimeP=checkDate(dateTimeP);
		return dateTimeP.getTime();
	}
	/**
	 * 将字符串形式的日期转换为毫秒形式
	 * @param dateTimeP
	 * @return
	 */
	public static long getTimeStamp(String dateTimeStrP){
		return checkDate(getDateTime(dateTimeStrP)).getTime();
	}
	
	/**
	 * 获得当前日期时间的毫秒形式
	 * @return
	 */
	public static long getTimeStamp(){
		return getTimeStamp("");
	}
	/**
	 * 获得毫秒对应日期的字符串形式
	 * @param timestamp
	 * @return
	 */
	public static String getDateTimeStr(long timestamp){
		Date date =	new Date();
		date.setTime(timestamp);
		return getDateTimeStr(date);
	}
	
	/**
	 * 获取两个日期相隔天数
	 * @param date1P
	 * @param date2P
	 * @return
	 */
	public static int getDateDifference(Date date1P,Date date2P){
		return Math.abs((int)(date1P.getTime()-date2P.getTime())/(1000*60*60*24));
	}
	
	/**
	 * 检查时间对象是否有效，
	 * 有效则返回被检查的对象，无效则创建并返回一个当前时间对象
	 * @param dateTimeP
	 * @return
	 */
	private static Date checkDate(Date dateTimeP){
		if(dateTimeP==null){
			dateTimeP=getDateTime();
		}
		return dateTimeP;
	}
}
